<?php
namespace app\api\model;
use think\Model;
use think\Db;
class Venueappoint extends Model{
    // 设置当前模型对应的完整数据表名称
      protected $table = 'gx_appointment_gym';
      protected $autoWriteTimestamp = false;
      public function getStatusAttr($value)
          {
                  $status = [-1=>'已取消',0=>'审核中',1=>'开始健身',2=>'待支付',3=>'进行中',4=>'已结束'];
                  return $status[$value];
          }
      
      public function makeAppoint($data){
          try {
             $id=$this->allowField(true)->save($data);
             if($id){
                 return $id;
             }else{
                 return 0;
             }
          }catch (\think\Exception $e){
              trace('unkown exception');
          }
      }
    /**
     * @param int $user_id 用户ID
     * @param string $datetime 日期
     * @param int $page_num 分页页码
     * @param int $page_size 每一页显示条数
     */
      //这里数据库设计的就是如果type=1是选择的是产地 type=2是选择的是产地和课程
      //也就是说type=2包含了type=1 如果查询type=1就是产地使用数 type=2
      //就是意味着产地和课程数
      //就是type=1 or type=2 这个进行数据 
      //就是 type=1 or type=2  type=1 场地数 第一个如果有数据 就取启迪个整个数组里面
      public function MySelectLists($user_id,$datetime,$page_num=1,$page_size=10){
          try {
             $page_int=($page_num-1)*$page_size;
             
            $res= $this->query("SELECT
p.id,
p.img,
p.designation,
appoint.`status`,
appoint.startime,
appoint.endtime,
appoint.type,
p.fee,
p.xishu
FROM
	gx_venue_status p,
	gx_appointment_gym appoint
WHERE
	p.place_id = appoint.place_id
AND appoint.user_id = ?
AND appoint.riqi=?
LIMIT ?,?                ",array($user_id,$datetime,$page_int,$page_size));
           
            dump($res);
            die;
           if(!empty($res)){
               
               return $res;
              
           }else{
               return 0;
           }
          }catch (\think\Exception $e){
              trace('select exception'.$e->getMessage());
          }
      }
      //已结束点击评价 
      public function Evation($data)
      {
        $id= Db::name('gx_evaluate')->insertGetId($data);
        if($id){
            return $id;
        }else{
            return 0;
        }
      }
      //点击日期默认查询当前日期的预约的场地
      /**
       * @param string $datetime 查询的日期
       * @param int 查询的用户ID(登录过后SEESION中的值)
       * @param int $page_num 开始的页数
       * @param int $page_size 一页显示的条数
       * @return array $res 返回查询的结果集(结果集中不单单的是页面显示的数据，而是当status=2开始健身的时候取出点击的连接后面加上取出
       * @desciption 取出的场地的place_id 以及开始的时间和结束的时间
       * @description为了开始健身能够有效的更好的扫描的时候更好地计算 这里点击开始健身按钮后面?fee=22&xishu=1&place_id=1
       * 这里如果不放心用户非法修改二维码参数我们可以传递 riqi place_id startime endtime 查询数据库看看传递的fee xishu 是否一致即可
       */
      public function MyselectInfo($user_id,$datetime,$page_num=1,$page_size=10){
          $page_int=($page_num-1)*$page_size;
         $res= $this->query("SELECT
p.id,
p.img,
p.designation,
appoint.`status`,
appoint.startime,
appoint.endtime,
appoint.type,
venue.fee,
venue.xishu
FROM
	gx_venue_status  venue,
	gx_appointment_gym appoint,
    gx_place p
WHERE
	p.id = appoint.place_id
AND
venue.place_id=appoint.place_id
AND appoint.user_id = ?
AND appoint.riqi=?
LIMIT ?,?",array($user_id,$datetime,$page_int,$page_size));
          if(!empty($res)){
              return $res;
          }else{
              return 0;
          }
      }
      
      //正式测试结果
      /**
       * @param string $datetime 查询的日期
       * @param int 查询的用户ID(登录过后SEESION中的值)
       * @param int $page_num 开始的页数
       * @param int $page_size 一页显示的条数
       * @return array $res 返回查询的结果集(结果集中不单单的是页面显示的数据，而是当status=2开始健身的时候取出点击的连接后面加上取出
       * @desciption 取出的场地的place_id 以及开始的时间和结束的时间
       * @description为了开始健身能够有效的更好的扫描的时候更好地计算 这里点击开始健身按钮后面?fee=22&xishu=1&place_id=1
       * 这里如果不放心用户非法修改二维码参数我们可以传递 riqi place_id startime endtime 查询数据库看看传递的fee xishu 是否一致即可
       */
      public function MyselectInfos($user_id,$datetime,$page_num=1,$page_size=10){
          $page_int=($page_num-1)*$page_size;
          $res= $this->query("SELECT
	gy.id,
	gy.appoint_time,
	gy.startime,
	gy.endtime,
	gy.place_id,
	gy.riqi,
	o.`status`
FROM
	gx_appointment_gym gy,
	gx_order o
WHERE
	o.id = gy.order_id
AND gy.user_id = ?
AND gy.riqi = ?

LIMIT ?,?",array($user_id,$datetime,$page_int,$page_size));
          if(!empty($res)){
//             foreach ($res as $key=>$va){
//                 $res[$key]['extra']=$this->AppointChongZhu($va['id'], $user_id, $datetime);
//             }
            //dump($res);
              
            $data_new=[];
            foreach ($res as $key=>$va){
               //$res['info']=$this->getItem($va['place_id']);
               $va['extra']=$this->getItem($va['place_id']);
               $va['count']=array_to_fe($va['appoint_time']);
               $data_new[]=$va;  
            }
            return $data_new;
          }else{
              return 0;
          }
      }
      public function getItem($place_id){
         $res=Db::name('place')->where(array('id'=>$place_id))->field(array('id','img','designation'))->find();
        if(!empty($res)){
            return $res;
        }else {
            return 0;
        }
      }
      
      public function getappointInfo($where){
          $res= $this->query("SELECT
	gym.startime,
	gym.endtime
FROM
	gx_appointment_gym gym
WHERE
	gym.user_id = ?
   And
       gym.riqi=?
And gym.appoint_time=?
And gym.place_id=?             
",array($where['user_id'],$where['riqi'],$where['appoint_time'],$where['place_id']));
          if(!empty($res)){
              //             foreach ($res as $key=>$va){
              //                 $res[$key]['extra']=$this->AppointChongZhu($va['id'], $user_id, $datetime);
              //             }
              //dump($res);
      
              
              return $res[0];
          }else{
              return 0;
          }
      }
      
      //需要对数组下标进行比遍历
      public function AppointChongZhu($user_id,$datetime,$place_id){
         $res=Db::name('appointment_gym')->where(array('user_id'=>$user_id,'riqi'=>$datetime,'place_id'=>$place_id))->select();
        
         $count=count($res);
         //dump($res);
         if(!isset($res))ajaxReturn2(-1,'fetch failed','');
         
         $data=array();
         if($count==1){
          $data['dan']=$res[0];
          return $data;
         }else{
             for ($i=0;$i<$count;$i++){
                 for ($j=$count-1;$j>$i;$j--){
                     //0 3-0 3 2 1
                     // 1 3,2
                     //2 3
                     if($res[$i]['endtime']==$res[$j]['startime']){
                         $data[]=$res[$j];
                         $data[]=$res[$i];
                     }else {
                         $data[]=$res[$j];
                     }
         
                 }
             }
              
             //$data=array_unique($data)
             $new_data=array();
             foreach ($data as $va){
                 $new_data[]=$va['startime'];
                 $new_data[]=$va['endtime'];
             }
             $data=a_array_unique($new_data);
             $data=SortPaxu($data);
             $re=IsCountinuous($data,count($data));
             //var_dump($re);
             return $re;
             //也就说要么连续要么单独的时间段
             //然后页面取出来即可
             //意味着用户就是定了8-9的还有12-16的课程
             //也就是说用户
             // return SortPaxu($data);
         }
      }
      //查询预约信息
      //根据时间范围查询
      /**
       * 
       * @param array $where 查询的where条件
       * @return array 查询出预约的场馆的名称 场地情况和选课情况
       */
      public function selectAppointInfo($where){
          //这样的查询方式
          //开始的时间在我们刚刚重新组合
        // $where=array('place_id'=>$where['place_id'],'user_id'=>$where['user_id'],'startime'=>$where['startime'],'endtime'=>$where['endtime'],'riqi'=>$where['riqi'],'type'=>2);
         //$res=Db::name('appointment_gym')->where($where)->buildSql();
       $res=  Db::query("SELECT
  gym.startime,
  gym.endtime
FROM
	`gx_appointment_gym` gym
WHERE
	gym.`place_id` = ?
AND  gym.`user_id` = ?
AND  gym.`startime` BETWEEN ?
AND ?
AND gym.`riqi` = ?
AND gym.`type` = 2",$where);
          if(!empty($res)){
              return $res;
          }else{
              return 0;
          }
      }
      //查询场馆信息
      public function selectPlaceName($place_id){
        $res= Db::query("SELECT
	p.designation,
	c.`name`
FROM
	gx_place p,
	gx_city c
WHERE
	p.area = c.id
AND c.upid = 9
AND p.id = ?",array($place_id));
        if(!empty($res)){
            return $res;
        }else{
            return 0;
        }
      }
      //需要对数组下标进行比遍历
      public function AppointChongZhus($user_id,$place_id){
          $res=Db::name('appointment_gym')->where(array('user_id'=>$user_id,'place_id'=>$place_id))->select();
          $count=count($res);
          if(!isset($res))ajaxReturn2(-1,'fetch failed','');
           
          $data=array();
          if($count==1){
              $data['dan']=$res[0];
              return $data;
          }else{
              for ($i=0;$i<$count;$i++){
                  for ($j=$count-1;$j>$i;$j--){
                      //0 3-0 3 2 1
                      // 1 3,2
                      //2 3
                      if($res[$i]['endtime']==$res[$j]['startime']){
                          $data[]=$res[$j];
                          $data[]=$res[$i];
                      }else {
                          $data[]=$res[$j];
                      }
                       
                  }
              }
      
              //$data=array_unique($data)
              $new_data=array();
              foreach ($data as $va){
                  $new_data[]=$va['startime'];
                  $new_data[]=$va['endtime'];
              }
              $data=a_array_unique($new_data);
              $data=SortPaxu($data);
              $re=IsCountinuous($data,count($data));
              //var_dump($re);
              return $re;
              //也就说要么连续要么单独的时间段
              //然后页面取出来即可
              //意味着用户就是定了8-9的还有12-16的课程
              //也就是说用户
              // return SortPaxu($data);
          }
      } 
}